#ifndef QLSLOGINAPPFWK_H
#define QLSLOGINAPPFWK_H

#include <QWidget>
#include <QPoint>
#include <QMouseEvent>
#include <QLineEdit>
#include <QCache>
#include <QStandardItemModel>
#include <QCompleter>
#include <QShowEvent>

#include <db_manager/service/user_service.h>

#include "qls_login_appfwk_global.h"

namespace Ui {
class QLS_LOGIN_APPFWK_EXPORT QLsLoginAppfwk;
}

class QLS_LOGIN_APPFWK_EXPORT QLsLoginAppfwk : public QWidget
{
    Q_OBJECT

public:
    explicit QLsLoginAppfwk(QWidget *parent = nullptr);
    ~QLsLoginAppfwk();
signals:
    /* 登录的信号 */
    void sigLogin(User);

private slots:
    /* 登录 */
    void on_loginBtn_clicked();
    /* 选择注册账号 */
    void on_toRegisterBtn_clicked();
    /* 选择修改密码 */
    void on_toAlterBtn_clicked();
    /* 选择找回密码 */
    void on_toFindBtn_clicked();
    /* 返回登录主界面 */
    void returnLoginBtn();
    /* 注册用户 */
    void on_registerBtn_clicked();
    /* 修改密码 */
    void on_alterBtn_clicked();
    /* 找回密码 */
    void on_findBtn_clicked();
    /* 记住密码 */
    void on_remeberCheckBox_stateChanged(int arg1);
    /* 自动登录 */
    void on_autoLoginCheckBox_stateChanged(int arg1);
    /* 用户名自动提示 */
    void on_userNameLineEdit_textChanged(const QString &arg1);
    /* 用户名自动提示：选择 */
    void onUserChoosed(const QString &key);

private:
    /* 主界面初始化 */
    void homeInit();
    /* 读取本地缓存 */
    void readLocalCache();
    /* 连接服务器 */
    void libeventInit();
    /* 数据库初始化 */
    void DataBaseInit();

private:
    Ui::QLsLoginAppfwk *ui;
    User me;
    UserService us;

    /* 用户名输入框自动提示 */
    QStandardItemModel *userModel;
    QCompleter *userCompleter;

    /* 鼠标事件重载 - 所需变量 */
    bool bPressFlag{ false };
    QPoint beginDrag;

    bool enable{ false };

    static QCache<QString, User> userCache;

protected:
    /* 鼠标事件重载 - 按下事件 */
    void mousePressEvent(QMouseEvent *event);
    /* 鼠标事件重载 - 释放事件 */
    void mouseReleaseEvent(QMouseEvent *event);
    /* 鼠标事件重载 - 移动事件 */
    void mouseMoveEvent(QMouseEvent *event);
    /* 事件过滤器 */
    bool eventFilter(QObject *target, QEvent *event);
};

#endif // QLSLOGINAPPFWK_H
